package com.iflytek.web.listener;


import javax.servlet.ServletContext;
import javax.servlet.annotation.WebListener;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

/**
 * 监听系统访问人数的监听器
 */
@WebListener
public class UserCountListener implements HttpSessionListener {

    // 当浏览器访问服务器的时候，会话开启时会自动进入
    public void sessionCreated(HttpSessionEvent event) {
        // 获取ServletContext对象，类似于之前的application
        // 是一个所有用户共享的数据，访问人数（userCount）可以放到这里面
        ServletContext ctx = event.getSession().getServletContext();
        Integer userCount = (Integer) ctx.getAttribute("userCount");
        if (userCount == null) {
            userCount = 1;
        } else {
            userCount++;
        }
        // 将最新的用户访问人数重新放回到ServletContext里面
        ctx.setAttribute("userCount", userCount);
        System.out.println("=====================userCount=" + userCount);
        System.out.println("******session创建，进入sessionCreated*********");
    }

    /**
     * 当session销毁时自动进入
     * 注：Session销毁时服务器不一定能立刻知道，会有一定的时间差
     */
    public void sessionDestroyed(HttpSessionEvent event) {
        // 获取ServletContext对象，类似于之前的application
        // 是一个所有用户共享的数据，访问人数（userCount）可以放到这里面
        ServletContext ctx = event.getSession().getServletContext();
        Integer userCount = (Integer) ctx.getAttribute("userCount");
        if (userCount == null) {
            userCount = 0;
        } else {
            userCount--;
        }
        // 将最新的用户访问人数重新放回到ServletContext里面
        ctx.setAttribute("userCount", userCount);
        System.out.println("******session销毁，启动sessionDestroyed*********");
    }

}